import os
import tkinter as tk
from tkinter import messagebox
from tkinter import ttk

image_extensions = ['.jpg', '.jpeg', '.png', '.bmp', '.gif', '.tiff', '.webp']  # 支持的图片扩展名

def rename_images(directory):
    try:
        # 获取目录下所有文件
        files = os.listdir(directory)

        # 筛选出所有图片文件（按扩展名判断）
        image_files = [f for f in files if os.path.splitext(f)[1].lower() in image_extensions]

        # 设置进度条的最大值为文件数量
        progressbar['maximum'] = len(image_files)

        # 遍历所有图片文件并重命名
        for index, image_file in enumerate(image_files):
            # 获取文件的扩展名
            file_extension = os.path.splitext(image_file)[1]

            # 生成新的文件名
            new_name = f"{index+1}{file_extension}"

            # 构造旧文件的完整路径和新文件的完整路径
            old_path = os.path.join(directory, image_file)
            new_path = os.path.join(directory, new_name)

            # 检查目标文件是否已存在，如果存在，跳过
            if os.path.exists(new_path):
                print(f"文件 {new_name} 已存在，跳过重命名。")
                continue  # 跳过这个文件，处理下一个

            # 重命名文件
            os.rename(old_path, new_path)

            # 更新进度条
            progressbar['value'] = index + 1  # 更新进度条
            progressbar.update_idletasks()  # 刷新进度条显示

            # 更新当前正在重命名的文件名
            label_status.config(text=f"正在重命名：{image_file} -> {new_name}")

            # 更新窗口
            root.update_idletasks()

        # 如果成功，显示消息框
        messagebox.showinfo("成功", "所有图片文件已成功重命名！")
    except Exception as e:
        # 如果发生错误，显示错误消息
        messagebox.showerror("错误", f"发生错误：{str(e)}")

def on_submit():
    # 获取输入框中的目录路径
    directory = entry_directory.get()

    if not directory:
        messagebox.showwarning("警告", "请输入目录路径！")
        return

    if not os.path.isdir(directory):
        messagebox.showwarning("警告", "请输入有效的目录路径！")
        return

    rename_images(directory)

# 创建主窗口
root = tk.Tk()
root.title("图片重命名工具")

# 设置窗口大小
root.geometry("400x430")

# 显示提示文字
label_intro = tk.Label(root, text="\n请输入你要修改的目录路径，程序会将目录下所有图片重命名为数字。")
label_intro.pack(pady=10)

label_intro = tk.Label(root, text="(如果你的图片文件名不在此列，请修改本程序源码的第6行)")
label_intro.pack(pady=10)

label_intro = tk.Label(root, text="支持的图片文件拓展名如下\n"+str(image_extensions))
label_intro.pack(pady=10)

# 提示路径支持类型
label_path_support = tk.Label(root, text="支持的路径格式: \nC:\labelimg\download_img (Windows风格)\nC:\\\\labelimg\\\\download_img (Windows风格)\nC:/labelimg/download_img (Unix风格)")
label_path_support.pack(pady=10)

# 创建输入框
label_directory = tk.Label(root, text="目录路径 (绝对路径)：")
label_directory.pack(pady=5)

entry_directory = tk.Entry(root, width=40)
entry_directory.pack(pady=5)

# 创建按钮
button_submit = tk.Button(root, text="开始重命名", command=on_submit)
button_submit.pack(pady=20)

# 创建进度条
progressbar = ttk.Progressbar(root, orient="horizontal", length=300, mode="determinate")
progressbar.pack(pady=10)

# 创建状态标签，用于显示当前进度
label_status = tk.Label(root, text="")
label_status.pack(pady=10)

# 启动主事件循环
root.mainloop()
